package br.ufal.questione.web;

import java.io.Serializable;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import br.ufal.questione.dao.AvaliacaoDao;
import br.ufal.questione.dao.QuestionarioDao;
import br.ufal.questione.domain.Avaliacao;
import br.ufal.questione.domain.Avaliador;
import br.ufal.questione.domain.Pergunta;
import br.ufal.questione.domain.Questionario;
import br.ufal.questione.domain.Resposta;

@Controller
@RequestMapping("/avaliacao")
public class AvaliacaoController implements Serializable {

	private static final long serialVersionUID = -8255168833175651503L;
	
	private Logger logger = LoggerFactory.getLogger(AvaliacaoController.class);
	
	@Autowired
	private QuestionarioDao questionarioDao;
	
	@Autowired
	private AvaliacaoDao avaliacaoDao;	

	@RequestMapping(value = "/salvar", method = RequestMethod.POST)
	public String salvar(HttpServletRequest request, HttpSession session) {
		Avaliador avaliador = (Avaliador) session.getAttribute("avaliador");
		Questionario questionario = (Questionario) session.getAttribute("questionario");
		
		questionario = this.questionarioDao.consultar(questionario.getId());
		
		if ("ADM".equals(avaliador.getUsuario().getLogin())) {
			session.removeAttribute("questionario");
			return "redirect:/questionarios";
		}
		
		Avaliacao avaliacao = this.avaliacaoDao.consultarPorAvaliador(avaliador, questionario);
		
		if (avaliacao == null) {
			avaliacao = new Avaliacao(questionario, avaliador);
			this.avaliacaoDao.inserir(avaliacao);
		}
		
		for (Pergunta pergunta : questionario.getPerguntas()) {
			Long idResposta = Long.valueOf(request.getParameter(String.valueOf(pergunta.getId())));
			
			Resposta resposta = new Resposta(idResposta, pergunta);
			
			avaliacao.add(resposta);
		}
		
		this.avaliacaoDao.editar(avaliacao);		
		
		logger.info("Salvando avaliação - questionario.id = " + questionario.getId() + " - " + avaliador.getUsuario().getLogin());
		
		return "redirect:/questionarios";
	}
	
}
